package com.xyz.util;

import org.apache.commons.lang.StringUtils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 根据汉字得到其拼音
 * @author xyzjh
 *
 */
public class SpellUtils {
	/**
	 * 静态初始化
	 */
	private static SpellUtils spellUtils = new SpellUtils();

	/**
	 * 私有构造方法
	 */
	private SpellUtils() {

	}

	/**
	 * 获取单例
	 * @return
	 */
	public static  SpellUtils getInstance() {
		return spellUtils;
	}

	/**
	 * 根据汉语获取汉语拼音
	 * 例如输入:中华人民共和国
	 * 返回：zhonghuarenmingongheguo
	 * @param hanyu
	 * @return 
	 */
	public String getPinyinByHanyu(String hanyu) {
		if (!StringUtils.isBlank(hanyu)) {
			char[] cars = hanyu.toCharArray();
			StringBuilder stringBuilder = new StringBuilder(32);
			for (char charindex : cars) {
				stringBuilder.append(getPinyinByHanzi(charindex));
			}
			return stringBuilder.toString();
		}
		return null;
	}

	/**
	 * 传入一个中文字得到
	 * 
	 * @param hanzi
	 * @return 汉字对应的拼音
	 */
	public String getPinyinByHanzi(char hanzi) {

		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		// 设置当碰见“吕”时是用“U”还是用“V”，这里显示为"V"
		defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
		// 是否声调声调，这里控制不输出声调
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		try {
			return PinyinHelper.toHanyuPinyinStringArray(hanzi, defaultFormat)[0];
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) {
		System.out.println(SpellUtils.getInstance().getPinyinByHanyu("中华人民共和国"));
	}
}
